package cn._2dland.uploader;

import cn._2dland.uploader.utils.ChannelUtils;
import cn._2dland.uploader.utils.IniFile;
import cn._2dland.uploader.utils.Logger;

public class CUIUploader {
	private IniFile ini = null;

	public CUIUploader() {
		// 读取配置文件
		String home = System.getProperty("user.dir");
		String fileSep = System.getProperty("file.separator");
		if(!home.endsWith(fileSep))
			home += fileSep;
		ini = new IniFile(home + "upload.ini");

		ClientFactory.setIniFile(ini);

		// 设置httpclient的日志级别
		System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");

		// 设置日志调试模式
		String debug = ini.getConfigValue("common", "debug");
		Logger.setDebug("on".equals(debug));
	}

	/**
	 * 执行任务脚本
	 * @param taskFile 上传任务文件
	 */
	public void execute(String taskFile) {
		Logger.writec("开始执行上传任务...");

		long delay = 1000;
		try {
			delay = Long.parseLong(ini.getConfigValue("common", "delay", "1000"));
		} catch (Exception e) {
			delay = 1000;
		}

		// 读取上传任务
		TaskReader reader = new TaskReader(taskFile);
		for(UploadTask task; (task = reader.next()) != null; ){
			fixTask(task);

			// 获取上传客户端
			UploadClient client = ClientFactory.getUploadClient(task.type);
			// 尝试登录
			while(!client.isLogin()) {
				client.login();
			}
			// 开始执行上传任务
			Logger.writet("上传视频[" + task.type + "]：" + task.fileName + " ...");
			client.upload(task);
			Logger.writet("视频上传成功！");

			try {
				// 等待指定的时间
				Thread.sleep(delay);
			} catch (Exception e) {}
		}
		reader.close();

		Logger.writec("所有任务执行完毕!");
	}

	/**
	 * 修正任务信息
	 * @param task
	 */
	private void fixTask(UploadTask task) {
		if(isEmpry(task.category)) {
			// 分类为空时，读取ini文件的默认配置
			task.category = ini.getConfigValue(task.type, "default_category");
		}
		if(isEmpry(task.title)) {
			// 标题为空时，使用文件名
			task.title = task.fileName.substring(0, task.fileName.lastIndexOf('.'));
		}
		if(isEmpry(task.descript)) {
			// 简介为空时，使用标题
			task.descript = task.title;
		}
		if(isEmpry(task.tags)) {
			// 标签为空时，使用分类
			task.tags = ChannelUtils.getNameByID(task.type, task.category);
		}
		if(isEmpry(task.source)) {
			// 来源为空时，读取ini文件的默认配置
			task.source = ini.getConfigValue(task.type, "default_source");
		}
	}

	/**
	 * 判断字符串是否为空
	 * @param str
	 * @return
	 */
	private boolean isEmpry(String str) {
		return str == null || "".equals(str);
	}
}
